#pragma once
#include <QGraphicsScene>
#include "PageDoc.h"
class FrameDraw;
class RectFrame;

class mdiPageScene :
	public QGraphicsScene
{
public:
	
	mdiPageScene(QObject* parent, PageDoc& page);

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	mousePressEvent Event. </summary>
	///
	/// <remarks>	Etay Tchechanovski, 1/8/2012. </remarks>
	/// <param name="mouseEvent">	[in] The Event. </param>		
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent);

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	keyPressEvent Event. </summary>
	///
	/// <remarks>	Etay Tchechanovski, 1/8/2012. </remarks>
	/// <param name="keyEvent">	[in] The Event. </param>		
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual void keyPressEvent ( QKeyEvent * keyEvent );
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	shows all graphic items. </summary>
	///
	/// <remarks>	Yair Offir, 1/8/2012. </remarks>		
	////////////////////////////////////////////////////////////////////////////////////////////////////
	void showAll();
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	unshows all graphic items. </summary>
	///
	/// <remarks>	Yair Offir, 1/8/2012. </remarks>		
	////////////////////////////////////////////////////////////////////////////////////////////////////
	void removeAll();
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	remove a specific graphic item, and deletes it. </summary>
	///
	/// <remarks>	Yair Offir, 1/8/2012. </remarks>		
	////////////////////////////////////////////////////////////////////////////////////////////////////
	void removeFrame(FrameDraw* toRemove);
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	return a QVector with all graphic frames. </summary>
	///
	/// <remarks>	Yair Offir, 1/8/2012. </remarks>		
	////////////////////////////////////////////////////////////////////////////////////////////////////
	QVector<FrameDraw*> getFrames();
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	creates and adds a new rectangle. </summary>
	///
	/// <remarks>	Yair Offir, 1/8/2012. </remarks>		
	////////////////////////////////////////////////////////////////////////////////////////////////////
	RectFrame* addRectangle(QPointF point, qreal width, qreal height);
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	creates and adds a new polygon. </summary>
	///
	/// <remarks>	Yair Offir, 1/8/2012. </remarks>		
	////////////////////////////////////////////////////////////////////////////////////////////////////
	FrameDraw* addPolygon(QVector<QPointF> points);
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <summary>	draws a new polygon (when one is created this function is called. </summary>
	///
	/// <remarks>	Yair Offir, 1/8/2012. </remarks>		
	////////////////////////////////////////////////////////////////////////////////////////////////////
	void DrawPoly();
	virtual ~mdiPageScene(void);

	//stores the last polygon created.
	FrameDraw* _lastPoly;
	//stores the points for creating the next polygon
	QVector<QPointF> _pointsForNextPoly;
	//the action that till be taken upon clicking on the scene.
	enum RectAction { CHANGETOPOLY, DELETEPOINT, ADDPOLY, ADDRECT, REMOVE, ADDWORDRECT, NONE};
	RectAction _action; 
	enum RectView { SHOWN, HIDDEN};
	RectView _frameView; 
	RectFrame* _recentItem;
	PageDoc _pageDoc;

	// for words detection: maps rectangle to text
	QHash<FrameDraw*,HDAQGraphicsTextItem*> _rectFrameTexts;
};

